Удобно, когда необходимые к исполнению задачи автоматизированы, а хранилище данных надёжно, доступно и просто в пользовании.
Ознакомился с «Object Storage» на сервисе Яндекс.Облако и клиентом «s3cmd». Написал очень простенький сценарий (скрипт) для резервного копирования сайта.
Настройка на сервисе Яндекс.Облако
Создаем «бакет» в «Object Storage» на сервисе Яндекс.Облако: Консоль управления => Object Storage => Создать бакет
В настройках «бакета» лучше ограничить максимальный размер, доступ к объектам и класс хранилища установить как «холодное».
Создаем «сервисный аккаунт» в Яндекс.Облаке: Облако => Сервисные аккаунты => Создать сервисный аккаунт (с ролью «editor»).
Создаем ключи для «сервисного аккаунта»: Имя сервисного аккаунта => Создать новый ключ => Создать статический ключ доступа
Сохраняем КЛЮЧ ДОСТУПА и СЕКРЕТНЫЙ КЛЮЧ.
Настройка на сервере
Создаем директории для резервных копий:
mkdir ~/BACKUP
mkdir ~/BACKUP/backup_db
mkdir ~/BACKUP/backup_site
mkdir ~/BACKUP/zip
Создаем файл «s3cmd_script.sh» — сценарий (скрипт) резервного копирования:
touch ~/BACKUP/s3cmd_script.sh
Записываем в файл «s3cmd_script.sh» следующие строки:
#!/bin/sh
# Дата и время
DATETIME=`date +%Y-%m-%d_%H-%M`;
# Создание локальной копии файлов сайта
cp -r /var/www/html/* ~/BACKUP/backup_site
# Создание локальной копии базы данных сайта
mysqldump -u ПОЛЬЗОВАТЕЛЬ_СУБД -pПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_СУБД ИМЯ_КОПИРУЕМОЙ_БД > ~/BACKUP/backup_db/dump_$DATETIME.sql
# Создание ZIP-архива базы данных сайта
zip -r ~/BACKUP/zip/dump_$DATETIME.zip ~/BACKUP/backup_db/dump_$DATETIME.sql
#Создание ZIP-архива файлов сайта
zip -r ~/BACKUP/zip/site_$DATETIME.zip ~/BACKUP/backup_site/
# Синхронизация содержимого "~/BACKUP/zip" с Яндекс.Облаком
s3cmd sync \
--bucket-location=EU \
--exclude 'sqldump/*' \
~/BACKUP/zip \
s3://ИМЯ_БАКЕТА
# Удаление локальных копий ZIP
rm -rf ~/BACKUP/zip/*.zip
Помечаем файл «s3cmd_script.sh» как исполняемый:
sudo chmod +x ~/BACKUP/s3cmd_script.sh
Устанавливаем «s3cmd» — консольный клиент для сервисов, поддерживающих HTTP API Amazon S3:
sudo apt install s3cmd
Настраиваем «s3cmd» на работу с Яндекс.Облаком:
s3cmd --configure
Команда «s3cmd --configure
» сохранит настройки в файле «~/.s3cfg».
При необходимости можно создать этот файл самостоятельно или отредактировать его параметры.
Основные параметры для синхронизации с Яндекс.Облаком:
access_key = КЛЮЧ_ДОСТУПА
secret_key = СЕКРЕТНЫЙ_КЛЮЧ
host_bucket = storage.yandexcloud.net/ИМЯ_БАКЕТА
bucket_location = ru-central1
Содержание файла «~/.s3cfg» следующее:
[default]
access_key = КЛЮЧ_ДОСТУПА
access_token =
add_encoding_exts =
add_headers =
bucket_location = ru-central1
ca_certs_file =
cache_file =
check_ssl_certificate = True
check_ssl_hostname = True
cloudfront_host = cloudfront.amazonaws.com
content_disposition =
content_type =
default_mime_type = binary/octet-stream
delay_updates = False
delete_after = False
delete_after_fetch = False
delete_removed = False
dry_run = False
enable_multipart = True
encoding = UTF-8
encrypt = False
expiry_date =
expiry_days =
expiry_prefix =
follow_symlinks = False
force = False
get_continue = False
gpg_command = /usr/bin/gpg
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_passphrase =
guess_mime_type = True
host_base = storage.yandexcloud.net
host_bucket = storage.yandexcloud.net/ИМЯ_БАКЕТА
human_readable_sizes = False
invalidate_default_index_on_cf = False
invalidate_default_index_root_on_cf = True
invalidate_on_cf = False
kms_key =
limit = -1
limitrate = 0
list_md5 = False
log_target_prefix =
long_listing = False
max_delete = -1
mime_type =
multipart_chunk_size_mb = 15
multipart_max_chunks = 10000
preserve_attrs = True
progress_meter = True
proxy_host =
proxy_port = 0
put_continue = False
recursive = False
recv_chunk = 65536
reduced_redundancy = False
requester_pays = False
restore_days = 1
restore_priority = Standard
secret_key = СЕКРЕТНЫЙ_КЛЮЧ
send_chunk = 65536
server_side_encryption = False
signature_v2 = False
signurl_use_https = False
simpledb_host = sdb.amazonaws.com
skip_existing = False
socket_timeout = 300
stats = False
stop_on_error = False
storage_class =
throttle_max = 100
upload_id =
urlencoding_mode = normal
use_http_expect = False
use_https = True
use_mime_magic = True
verbosity = WARNING
website_endpoint = http://%(bucket)s.s3-website-%(location)s.amazonaws.com/
website_error =
website_index = index.html
Запускаем сценарий резервного копирования:
~/BACKUP/s3cmd_script.sh
Резервная копия сайта создана и загружена в «бакет» на сервисе Яндекс.Облако.
Добавляем сценарий (скрипт) «~/BACKUP/s3cmd_script.sh» в планировщик заданий:
crontab -e
В открывшийся файл добавляем строку. Например:
12 3 1 * * /home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/BACKUP/s3cmd_script.sh
Согласно данной записи, резервное копирование сайта будет осуществляться 1-ого числа каждого месяца в 3 часа 12 минут ночи.
Если желаете осуществлять шифрование резервных копий до их загрузки в «бакет», отредактируйте в файле «~/.s3cfg» строку:
gpg_passphrase = ЗАДАЙТЕ_ПАРОЛЬ_ДЛЯ_ШИФРОВАНИЯ
Файл «s3cmd_script.sh» — сценарий (скрипт) резервного копирования с шифрованием файлов:
#!/bin/sh
# Дата и время
DATETIME=`date +%Y-%m-%d_%H-%M`;
# Создание локальной копии базы данных сайта
mysqldump -u ПОЛЬЗОВАТЕЛЬ_СУБД -pПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_СУБД ИМЯ_КОПИРУЕМОЙ_БД > ~/BACKUP/backup_db/dump_$DATETIME.sql
# Создание ZIP-архива базы данных сайта и файлов сайта
zip -r ~/BACKUP/zip/dump_$DATETIME.zip ~/BACKUP/backup_db/dump_$DATETIME.sql
zip -r ~/BACKUP/zip/site_$DATETIME.zip /var/www/html/*
# Шифрование и загрузка файлов в Яндекс.Облако
s3cmd -e put ~/BACKUP/zip/site_$DATETIME.zip s3://ИМЯ_БАКЕТА
s3cmd -e put ~/BACKUP/zip/dump_$DATETIME.zip s3://ИМЯ_БАКЕТА
# Удаление локальных копий
rm -rf ~/BACKUP/zip/*.zip
rm -rf ~/BACKUP/backup_db/*
rm -rf ~/BACKUP/backup_site/*
Получение файла из «бакета» и расшифровка файла:
s3cmd get s3://ИМЯ_БАКЕТА/ИМЯ_ФАЙЛА
Всего Вам хорошего.
Публикации на тему:
https://cloud.yandex.ru/docs/storage/concepts/bucket
https://cloud.yandex.ru/docs/storage/tools/s3cmd
https://ru.wikipedia.org/wiki/Cron
https://help.ubuntu.com/community/CronHowto
https://habr.com/ru/post/90244/
https://habr.com/ru/post/515872/
https://www.opennet.ru/docs/RUS/bash_scripting_guide/
https://help.dreamhost.com/hc/en-us/articles/360022340471-Encrypting-data-with-S3cmd